fn main() {
    // 规则一，不可变借用，在变量拥有了一个值的可变引用时，可以拥有多个不可变引用，在这些不可变引用使用之前（存活期间），不能创建（）任何可变引用
    let mut s = String::from("rust");
    println!("s : {}", s);
    let s1 = &s;
    let s2 = &s;
    // let s3 = &mut s;
    // // s1和s2使用之前，不能创建s3
    // println!("s1: {}, s2: {}, s3:{}", s1, s2, s3);
    println!("s1: {}, s2: {}", s1, s2);
    let s3 = &mut s;
    println!("s3: {}", s3);

    // 规则二，可变借用，在变量拥有了一个值的可变引用时，在该可变引用使用之前（存活期间），不能创建（拥有）其他的可变或不可变引用
    let mut s = String::from("rust");
    println!("s : {}", s);
    let s1 = &mut s;
    // let s2 = &mut s;
    // let s3 = &s;
    // // s1使用之前，不能创建s2和s3
    // println!("s1: {}, s2: {}, s1: {}", s1, s2, s3);
    println!("s1: {}", s1);
    let s2 = &mut s;
    println!("s2: {}", s2);
    let s3 = &s;
    println!("s3: {}", s3);
}
